package com.yugong.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.yugong.entity.dto.OrderClass;
import com.yugong.entity.vo.request.OrderClassRequestVO;
import com.yugong.entity.vo.response.OrderClassListResponseVO;

import java.util.List;


/**
 * 订单班业务逻辑接口
 *
 * @author yugong
 * @date 2024/2/18
 */
public interface OrderClassService extends IService<OrderClass> {

    /**
     * 根据班名、订单班管理员工号查询订单班信息
     *
     * @param pageNum           当前页
     * @param pageSize          当前页数据个数
     * @param orderClassAdminNo 订单班管理员工号
     * @param orderClassName    班名
     * @return 订单班信息
     */
    PageInfo<OrderClassListResponseVO> findOrderClassNoReleasePage(Integer pageNum, Integer pageSize, String orderClassAdminNo, String orderClassName);

    /**
     * 新增订单班
     *
     * @param orderClassRequestVO 订单班请求实体类
     * @return 数据库影响行数
     */
    int addOrderClass(OrderClassRequestVO orderClassRequestVO);

    /**
     * 修改订单班
     *
     * @param orderClassRequestVO 订单班请求实体类
     * @return 数据库影响行数
     */
    int updateOrderClass(OrderClassRequestVO orderClassRequestVO);

    /**
     * 删除订单班
     *
     * @param orderClassNo 订单班号
     * @return 数据库影响行数
     */
    int deleteOrderClass(String orderClassNo);

    /**
     * 订单班 发布、开班、结班
     *
     * @param orderClassState   订单班状态
     * @param orderClassNo      班号
     * @param orderClassAdminNo 订单班管理员工号
     * @return 数据库影响行数
     */
    int changeOrderClassState(Integer orderClassState, String orderClassNo, String orderClassAdminNo);

    /**
     * 根据订单班管理员工号查询订单班
     *
     * @param orderClassAdminNo 订单班管理员工号
     * @return 订单班
     */
    List<OrderClassListResponseVO> findOrderClass(String orderClassAdminNo);

    /**
     * 根据班名查询订单班信息
     *
     * @param pageNum        当前页
     * @param pageSize       当前页数据个数
     * @param orderClassName 班名
     * @return 订单班信息
     */
    PageInfo<OrderClassListResponseVO> findOrderClass(Integer pageNum, Integer pageSize, String orderClassName);

    /**
     * 根据班号查询订单班状态
     *
     * @param orderClassNo 班号
     * @return 订单班状态
     */
    Integer findOrderClassState(String orderClassNo);

    /**
     * 查询学生可以报名的订单班
     *
     * @return 学生可以报名的订单班
     */
    PageInfo<OrderClassListResponseVO> searchOrderClassStudent(Integer pageNum, Integer pageSize, String orderClassName, String studentNo);

    /**
     * 查询未发布的订单班
     *
     * @param orderClassState   未发布的订单班
     * @param orderClassAdminNo 工号
     * @return 未发布的订单班
     */
    List<OrderClassListResponseVO> findOrderClass(String orderClassAdminNo, Integer orderClassState);

    /**
     * 根据班名、订单班管理员工号查询订单班信息（发布）
     *
     * @param pageNum           当前页
     * @param pageSize          当前页数据个数
     * @param orderClassAdminNo 订单班管理员工号
     * @param orderClassName    班名
     * @return 订单班信息
     */
    PageInfo<OrderClassListResponseVO> findOrderClassReleasePage(Integer pageNum, Integer pageSize, String orderClassAdminNo, String orderClassName);

    /**
     * 根据班名、订单班管理员工号查询订单班信息（开班）
     *
     * @param pageNum           当前页
     * @param pageSize          当前页数据个数
     * @param orderClassAdminNo 订单班管理员工号
     * @param orderClassName    班名
     * @return 订单班信息
     */
    PageInfo<OrderClassListResponseVO> findOrderClassStartReleasePage(Integer pageNum, Integer pageSize, String orderClassAdminNo, String orderClassName);

    /**
     * 根据班名、订单班管理员工号查询订单班信息（所有）
     *
     * @param pageNum           当前页
     * @param pageSize          当前页数据个数
     * @param orderClassAdminNo 订单班管理员工号
     * @param orderClassName    班名
     * @return 订单班信息
     */
    PageInfo<OrderClassListResponseVO> findOrderClassPage(Integer pageNum, Integer pageSize, String orderClassAdminNo, String orderClassName);
}
